package org.zjz.basket.util;

import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * Desc: 日期时间工具类
 *
 * @author gezq
 * @since 3/30/2022 - 10:35 PM
 */
@Slf4j
public final class DateTimeUtils {
    /**
     * 私有构造方法
     */
    private DateTimeUtils() {
    }

    /**
     * 获取日期时间格式器
     *
     * @param pattern 日期时间格式
     * @return 日期时间格式器
     */
    private static DateTimeFormatter getDateTimeFormatter(String pattern) {
        return DateTimeFormatter.ofPattern(pattern);
    }

    /**
     * 格式化LocalDateTime
     *
     * @param localDateTime 日期时间
     * @param pattern       日期时间格式
     * @return 格式化后的字符串
     */
    public static String formatLocalDateTime(LocalDateTime localDateTime, String pattern) {
        return localDateTime.format(getDateTimeFormatter(pattern));
    }

    /**
     * 解析LocalDateTime
     *
     * @param s  日期时间字符串
     * @param pattern 日期时间格式
     * @return 解析后的LocalDateTime
     */
    public static LocalDateTime parseLocalDateTime(String s, String pattern) {
        return LocalDateTime.parse(s, getDateTimeFormatter(pattern));
    }

    /**
     * 转换Date为LocalDateTime
     *
     * @param date Date
     * @return 转换后的LocalDateTime
     */
    public static LocalDateTime transDateToLocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * 转换LocalDateTime为Date
     *
     * @param localDateTime LocalDateTime
     * @return 转换后的Date
     */
    public static Date transLocalDateTimeToDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
}
